package acm.pta13;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.*;

/**
 * dfs搜索
 */
public class 病毒溯源2 {
    public static List<Integer>[] map;  //数的邻接表
//    public static StringBuilder res=new StringBuilder();
//    public static final StringBuilder empty = new StringBuilder();

    public static void main(String[] args) {
        // 创建 io.Reader 对象读取输入
        Reader sc = new Reader();
        // 读取节点数量
        int n = sc.nextInt();
        // 初始化图的邻接列表
        map = new List[n];
        // 创建 BitSet 对象跟踪有入边的节点
        BitSet bitSet = new BitSet(n);
        // 读取每个节点的出边
        for (int i = 0; i < n; i++) {
            int m = sc.nextInt();
            map[i] = new ArrayList<>(m);
            for (int j = 0; j < m; j++) {
                int to = sc.nextInt();
                bitSet.set(to);
                map[i].add(to);
            }
            // 对出边进行排序
            map[i].sort(Integer::compareTo);
        }
        // 找到没有入边的节点，即病毒的源头
        bitSet.flip(0, n);
        int s = bitSet.stream().iterator().nextInt();
        // 从源头开始进行深度优先搜索
        dfs(s);
        // 打印最长路径的长度
        System.out.println(res.size());
        // 构建并打印最长路径
        StringBuilder builder = new StringBuilder();
        res.forEach(o -> builder.append(o).append(" "));
        builder.deleteCharAt(builder.length() - 1);
        System.out.println(builder);
    }

    // 用于存储 DFS 过程中的当前路径
    static LinkedList<Integer> path = new LinkedList<>();
    // 用于存储找到的最长路径
    static LinkedList<Integer> res = new LinkedList<>();

    /**
     * 执行深度优先搜索的方法
     * @param cur 当前 DFS 过程中的节点
     */
    public static void dfs(int cur) {
        // 将当前节点添加到路径中
        path.add(cur);
        // 如果当前节点没有出边，且当前路径比最长路径还要长，则更新最长路径
        if (map[cur].isEmpty() && res.size() < path.size()) {
            res = new LinkedList<>(path);
            // 移除路径中的最后一个节点
            path.removeLast();
            return;
        }
        // 访问当前节点的每一个出边
        for (Integer next : map[cur]) {
            dfs(next);
        }
        // 移除路径中的最后一个节点
        path.removeLast();
    }
    static class Reader {
        static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

        public static int nextInt() {
            try {
                in.nextToken();
            } catch (Exception ignored) {}
            return (int) in.nval;
        }
    }
}
